<!DOCTYPE html>
<html lang="en">
<head>
  <title>敏捷开发的切身感受 && 一生的Geek</title>
  <meta charset="UTF-8">
  <meta name="description" content="ltoddy's blog">
  <meta name="author" content="liutao">
  <meta name="author" content="ltoddy">
  <meta name="author" content="just for fun">

  <link rel="icon" href="../../static/me.jpg">
  <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
  <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
        integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

  <!-- jQuert Microsoft CDN -->
  <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script>
  <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
  <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"
          integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
          crossorigin="anonymous"></script>
</head>
<body>
<div class="container">
  <div class="page-header">
    <h3>敏捷开发的切身感受 && 一生的Geek</h3>
  </div>
  <p>我很幸运,进入了一家以敏捷开发,结对编程模式开发的互联网公司.这让我能够一边工作一边跟同事交流学习.</p>
  <hr>
  <p>简单说一下公司每周开发流程,周一到周五九点多到,然后小组(team)开小会,交流一下昨天完成了哪些任务,今天准备要做的任务是什么.
    周四下午最后,与support,qa,ux等人一起开会,support会说下一周的story,周五上午最后,员工向老板展示你这周的成果,
    周五下午,大部分时间拆分任务(task),然后评估难度,打分.
    评分的原因是因为,如果这个任务难度太大,要么把这个任务拆分成多个更小的任务,要么是此任务往后排,设置较低的优先级.</p>
  <h4>测试驱动</h4>
  <p>实际开发的测试驱动,和书上的区别还是比较大的.单元测试是肯定要有的,这能保障你能正确的重构代码.</p>
  <p>我们有qa(质量分析),她们会测试,然后测试之后我们再提交代码(我们用git进行版本控制,而不是SVN).</p>
  <p>当然,有人会说,测试太多,会拖累项目进度,其实这么理解是有偏见的,qa是保证你产品正常运转的一个保障(虽然不能百分百全靠qa).</p>
  <p>我们开发人员的任务:认真完成每一个sprint(简单的可以任务就是一周的任务,一周一个周期)的,这也说明,我们的迭代速度是一周一迭代.</p>
  <h4>结对编程</h4>
  <p>对于我这种新人来说,结对编程还是对我很有帮助的,因为你不是一个人在写代码,你有同伴就在你身边,一起共同完成任务.</p>
  <p>公司的框架,在过去我是没有用过的,但是我还是能在队友的引导下一起完成任务,而且框架也慢慢学会了.</p>
  <p>我们(我所在的小组)前端用的React框架,后端是nodejs,和Ruby on rails, nodejs我之前接触过,但React,和rails没用过,
    如果直接让我上手,是不可能的.感谢结对编程,能让我不至于"发呆".</p>
  <p>(悄悄说一句,我第三天写的代码到现在都送到线上了,估计别的公司,你刚到,第一个月写的代码都不会到线上.)</p>
  <p>慢慢的,同事平常指导我,晚上周末有空就在宿舍看官方文档,上班直接上手项目,对React也有了一些理解.我成长速度还是挺快的.</p>
  <hr>
  <p>我们开发选用敏捷开发,而不是瀑布模型式的开发,这是正确的,我们有自己的平台,做自己的产品,
    需要不断的更新(更新速度还是很快的,一年更新四十八次,每一次的迭代都是一次更新), 这是瀑布模式做不到的.</p>
  <p>瀑布模式需要在开发前期,把文档收集整理好,严格按照文档来,它不够灵活,而且感觉瀑布模型做的产品是给他人做的,做好了就做好了,
    也不管未来的更新了(个人观点).</p>
  <p>而敏捷开发就不一样了,经常的去迭代项目,以小步快跑模式去慢慢让项目成长,这是正确的,一点一点的扩展项目,也可以很灵活的适应需求的变更.
    发现了Bug,或者提出了新需求作为hot fix出去.</p>
  <p>我们需求变化的很快(周周有有新需求,好难受).</p>
  <p>客户也会间接的参与进来.我们有客服,会去和客户交流(有qq群,也有在线咨询),我们会接受客户的意见,毕竟顾客是上帝.</p>
  <p>我们开发用到了哪些语言(框架): JavaScript(React, nodejs, vue.js), rust(另一个组用,具体他们怎么做的不清楚……),
    Python(主要是qa那边跑的脚本), Ruby(Ruby on rails, 不过慢慢要被nodejs重写了),运维那边,后端用的Django,
    前段用的vue.js,他们主要给我们提供展示change log, 其实这很方便我们去发送release的邮件,过去好麻烦的,去看各种版本号,
    现在只需要从运维做好的web项目那里查就可以了,然后复制粘贴. 我们这边,主要是维护平台,
    前段用的React框架(现在前段的趋势是,你不在会看见.html文件,而是页面由JS渲染生成),后端是nodejs,和部分Ruby.</p>
  <p>结对编程其实还有好处,那就是消除巴士效应,正如老板所说,当有人离开不在时,可以有人顶替你的工作,不会影响项目进度.</p>
  <p>所以说,在我们公司你得会的比较杂一些,开发人员,运维,qa,都在写代码.举个例子,运维也在写前端后端,有自己的项目.</p>
  <p>qa那边我不是很清楚,不过我看到了js项目和不少Python和bash的脚本.</p>
  <hr>
  <p>当然敏捷开发和瀑布模式的开发也各有各自的好处,自己的感觉是,瀑布模型适合给银行政府这样的单位做项目,因为给他们做项目,功能就已经事先定好了,
    文档也会在前期给出,也不会有大的变动,而且有一个现实就是你去政府部门的网站,你会觉得很垃圾,很low,也有时候很卡,因为开发的时候我估计没人会去
    review代码,没人会去想着如何提高性能,仅仅是完成文档的需求就好(个人见解),而我们公司是给自己做平台, 做自己的产品去买,会有很多功能的变更,
    所以我们会经常review代码,会去rebuild一些模块,有人会认为重构代价大.其实重构是为了方便日后,你今天感觉重构花了很多经历,但是,当你日后在来维护
    这段代码的时候,你会感谢今天的重构.</p>
  <p>最后一句话,一生的Geek,你需要不断的让自己成长.</p>

  <a href="https://github.com/ltoddy/ltoddy.github.io" target="_blank"><img
      style="position: absolute; top: 0; right: 0; border: 0;"
      src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67"
      alt="Fork me on GitHub"
      data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png">
  </a>

</div>
</body>
</html>